// Copyright 2011 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS-IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package util
{
	public class Cancelable {	

		private static var s_nSerial:Number = 1;
		
		private var _obThis:Object = null;
		private var _fnCallback:Function = null;
		private var _nId:Number = 0;
		
		public function Cancelable(obThis:Object, fnCallback:Function) {			
			_nId = ++s_nSerial;
			_fnCallback = fnCallback;
		}
		
		public function get callback():Function {
			var nIdNow:Number = _nId;
			var fnWrapper:Function = function( ...aArgs ):void {
				if (_fnCallback && _nId > 0 && nIdNow == _nId)
					_fnCallback.apply( _obThis, aArgs );
			}
			return( fnWrapper );
		}
		
		public function Cancel() : void {
			_nId = 0;
		}		
	}
}
